<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>递归复制</title>
</head>
<body>

</body>
<script>
    // 递归遍历对象或数组，并复制它们的属性或元素，处理嵌套结构。
    function deepClone (obj) {
        if (obj === null || typeof obj !== 'object') {
            return obj
        }

        let clone = Array.isArray(obj) ? [] : {}
        for (let key in obj) {
            if (obj.hasOwnProperty(key)) {
                clone[key] = deepClone(obj[key])
            }
        }
        return clone
    }

    // 优点
    //     简单易用： 上述方法都比较简单，能够快速实现深拷贝。
    //     通用性强： 能够处理大多数常见的对象和数组结构。

    // 缺点
    //     性能问题： 对于非常大的对象或包含循环引用的对象，递归实现的深拷贝可能会导致性能下降或堆栈溢出。
    //     不支持特殊对象： 不能处理函数、正则表达式、undefined 等特殊对象。
    //     循环引用问题： 如果对象包含循环引用（即对象属性相互引用），递归复制可能会陷入死循环。
</script>
</html>